#ifndef COMUNICACAO_CLIENTE_H
#define COMUNICACAO_CLIENTE_H

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <netdb.h>
#include <arpa/inet.h>

#include "udp_socket_io.h"
#include "logica.h"

#ifndef MAX_FILMES
#define MAX_FILMES 200
#endif

#ifndef EXT
#define EXT ".csv"
#endif

#define MARCAR_TEMPOS_CLIENTE
#ifdef MARCAR_TEMPOS_CLIENTE
#define ARQ_TEMPO_CLIENTE "tempo_cliente_"
#include <string.h>
struct timeval t0_cliente, t1_cliente; /* Estruturas para marcar tempo */
#endif

/* Maximo de timeouts na operacao 1 e 4 */
#define MAX_TIMEOUTS 15

/* Globais para contagem de bytes corrompidos */
int bytes_total;
int bytes_corrompidos;
tFilme bd_filmes[MAX_FILMES];

/* Envia pedido ao servidor e aguarda os dados desejados */
int executa_sistema_cliente(int sockfd, struct sockaddr *to);

/* Recebe todos os titulos enviados pelo servidor em ordem de ID */
int receber_titulos(int sockfd);

/* Recebe a sinopse do filme com ID igual a 'idfilme' */
int receber_sinopse_filme(int sockfd, int idfilme);

/* Recebe todas as informacoes do filme com ID igual a 'idfilme' */
int receber_informacoes_filme(int sockfd, int idfilme);

/* Recebe todas as informacoes de todos os filmes */
int receber_tudo(int sockfd);

/* Recebe confirmacao do envio de uma nota */
int receber_confirmacao_nota(int sockfd, int idfilme, int nota);

/* Recebe a nota media e o numero de clientes de um filme */
int receber_nota_filme(int sockfd, int idfilme);

/* Compara dados de dois buffers e retorna numero de bytes diferentes */
int buffer_diff(void *buff1, void *buff2, int len);

#endif
